package com.up.interview.dataStructuresAndAlgorithms;

/**
 * @author: liuchengjun
 * @title: TwoFind
 * @projectName: 海联技术中台V2.0
 * @depart 软件事业部
 * @description:
 * @date: 2025/10/23/周四 15:17 (星期四)
 * @since V2.0
 */
public class TwoFind {
    /**
     * 二分查找：通过折半不断去寻找问题的解
     * - 求解最优解，最小值和最大值
     * - 判断问题，转为数学问题，是否具有单调性
     * - 定义所求值区间
     * - 二分查找
     *
     *
     *
     *
     *
     *
     *
     *
     *
     * 二分查找通用解法:闭区间实现[]
     *              查找第一个大于等于target的数
     *              循环不变量原则:L-1 < target     R+1>=target
     *              5 7 7 8 8 10
     *                  r l
     *            问题转换：>=x
     *                    >x    >=x+1
     *                    <x    (>=x)-1
     *                    <=x   (>=x+1)-1)
     *                    根据题意是否需要比对查找出来的值和目标值
     *            二分查找本质:在于外层如何传参
     * @param nums
     * @param target
     * @return  L或返回数组长度(无满足值则返回)
     */
    private int towFind(int[] nums, int target) {
        int left = 0;
        int right = nums.length-1;
        //退出条件 left>right
        while (left<=right){
            int mid = (left+right)/2;
            if(nums[mid]<target){
                left = mid+1;
            }else {
                right = mid-1;
            }
        }
        return left;
    }

}
